<!-- 什么是CDN -->
CDN就是根据用户位置分配最近的资源，让用户在上网的时候不用直接访问源站，
而是访问离他“最近的”一个CDN节点，该节点其实是缓存了源站内容的代理服务器

<!-- 原理 -->
在没有应用CDN时，我们使用域名访问某个站点的路径为：

用户提交域名→浏览器对域名进行解释→DNS解析得到目的主机的IP地址→根据IP地址发出请求→得到请求数据并回复

应用CDN后，DNS解析不再返回IP地址，而是一个CNAME (Canonical Name) 别名记录，指向CDN的全局负载均衡。

CNAME实际上在域名解析的过程中承担了中间人（或者说代理）的角色，这是CDN实现的关键。

<!-- 负载均衡系统 -->
由于没有返回IP地址，本地DNS会向负载均衡系统发送请求，然后进入CDN的全局负载均衡系统进行智能调度：

看用户的IP地址，查表得知地理位置，找相对最近的边缘节点。
看用户所在的运营商网络，找相同网络的边缘节点。
检查边缘节点的负载情况，找负载较轻的节点。
其他因素，如节点的“健康状况”、服务能力、带宽、响应时间等。
综合上述因素，找到最合适的边缘节点，然后将该节点返回给用户，用户就能够就近访问CDN的缓存代理。

<!-- 缓存代理 -->
缓存系统是CDN的另一个关键组成部分，缓存系统会有选择地缓存那些最常用的资源。

其中有两个衡量CDN服务质量的指标：

命中率：用户访问的资源恰好在缓存系统里，可以直接返回给用户，命中次数与所有访问次数之比。
回源率：缓存里没有，必须用代理的方式回源站取，回源次数与所有访问次数之比。
缓存系统也可以划分成层次，分为一级缓存节点和二级缓存节点。一级缓存配置高一些，直连源站，二级缓存配置低一些，直连用户。

回源的时候二级缓存只找一级缓存，一级缓存没有才回源站，这样可以有效地减少真正的回源。

现在的商业CDN命中率通常在90%以上，相当于把源站的服务能力放大了10倍以上。

<!-- 总结 -->
CDN的目的是为了改善互联网的服务质量，通俗一点说其实就是提高访问速度。

CDN构建了全国、全球级别的专网，让用户就近访问专网里的边缘节点，降低了传输延迟，实现了网站加速。

通过CDN的负载均衡系统，智能调度边缘节点提供服务，相当于CDN服务的大脑，
而缓存系统相当于CDN的心脏，缓存命中直接返回给用户，否则回源。